package com.autoerp.dao.jdbc.servico;

import java.sql.Connection;
import java.util.List;

import org.mentabean.BeanSession;

import com.autoerp.dao.servico.OrdemServicoDAO;
import com.autoerp.model.cliente.ClienteEntity;
import com.autoerp.model.servico.OrdemServicoEntity;


/**
 * Classe OrdemServicoDAOJdbc, implementação da interface OrdemServicoDAO.
 */
public class OrdemServicoDAOJdbc implements OrdemServicoDAO {
	/** The session. */
	private BeanSession session;

	/** The conn. */
	private Connection conn;

	/**
	 * Instantiates a new ordem de serviço dao jdbc.
	 * 
	 * @param session
	 *            the session
	 */
	public OrdemServicoDAOJdbc(BeanSession session) {
		this.session = session;
		this.conn = session.getConnection();

	}

	/**
	 * Excluir a ordem de serviço atraves do seu identificador.
	 * 
	 * @param id_ordem_servico
	 *            identificador da ordem de servico
	 */
	public void deletar(Integer id_ordem_servico) {
		// Cria instancia da ordem de servico
		OrdemServicoEntity ordemServico = new OrdemServicoEntity();
		// Seta identificador da ordem de servico
		ordemServico.setId_ordem_servico(id_ordem_servico);

		// Busca e exclui a ordem de servico
		if (session.load(ordemServico)) {
			session.delete(ordemServico);
		} else {
			throw new IllegalStateException("Ordem de servico não encontrada!");
		}

	}

	/**
	 * Localizar a ordem de serviço atraves do seu identificador.
	 * 
	 * @param id_ordem_servico
	 *            identificador da ordem de serviço
	 * @return instancia da ordem de serviço
	 */
	public OrdemServicoEntity buscarPorId(Integer id_ordem_servico) {
		// Cria instancia da ordem de servico
		OrdemServicoEntity ordemServico = new OrdemServicoEntity();
		// Seta identificador da ordem de servico
		ordemServico.setId_ordem_servico(id_ordem_servico);

		// Busca e retorna a ordem de servico
		if (session.load(ordemServico)) {
			return ordemServico;
		}

		// Retorna null se a ordem de servico nao for encontrada
		return null;
	}

	/**
	 * Localizar a ordem de serviço atraves do identificador do carro.
	 * 
	 * @param id_carro_fk
	 *            Identificador do carro
	 * @return instancia da ordem de serviço
	 */
	public OrdemServicoEntity buscarPorIdCarro(Integer id_carro_fk) {
		// Cria instancia da ordem de servico
		OrdemServicoEntity ordemServico = new OrdemServicoEntity();
		// Seta identificador do carro
		ordemServico.getCarro().setId_carro(id_carro_fk);

		// Busca e retorna a ordem de servico
		if (session.load(ordemServico)) {
			return ordemServico;
		}

		// Retorna null se a ordem de servico nao for encontrada
		return null;

	}

	/**
	 * Localizar ordem de serviço
	 * 
	 * @param ordemServico
	 *            instancia da ordem de serviço
	 * @return Lista de ordem de serviço
	 */
	public List<OrdemServicoEntity> buscarOrdemServico(
			OrdemServicoEntity ordemServico) {
		// / Retorna lista das ordens de servicos encontradas.
		return session.loadList(ordemServico);
	}
	
	
	/**
	 * Localizar Lista de OS.
	 *
	 * @return Lista de OS
	 */
	public List<OrdemServicoEntity> buscarListaOS(){
	// Cria instancia da Ordem de servico
		OrdemServicoEntity os = new OrdemServicoEntity();
			
			// Retorna lista de OS.
			return session.loadList(os);
	
	}
	/**
	 * Salvar a ordem de serviço no banco de dados.
	 * 
	 * @param ordemServicoEntity
	 *            instancia da ordem de serviço
	 */
	public void salvar(OrdemServicoEntity ordemServicoEntity) {
		// Salva ordem de servico no banco
		session.insert(ordemServicoEntity);
	}

}
